#include <studies.architecture.displaying_text/access_controller.h>
#include <studies.architecture.transmitting/local_access_controller.h>
#include <studies.architecture.interacting/access_controller.h>
#include <studies.architecture.processing/access_controller.h>

#include <studies.architecture.displaying_text/recover_pwd.h>
#include <studies.architecture.transmitting/local_recover_pwd.h>
#include <studies.architecture.interacting/recover_pwd.h>

#include <studies.architecture.storage/login.h>

using namespace studies::architecture;

struct supplier {

    // DISPLAYING
    typedef displaying_text::access_controller access_controller_displayer;
    typedef displaying_text::recover_pwd recover_pwd_displayer;

    // INTERACTION
    typedef interacting::access_controller_t<supplier> access_controller_interactive;
    typedef interacting::recover_pwd_t<supplier> recover_pwd_interactive;

    // TRASMITTING
    typedef transmitting::local_access_controller<supplier> access_controller_transmitter;
    typedef transmitting::local_recover_pwd<supplier> recover_pwd_transmitter;

    // PROCESSING
    typedef processing::access_controller<supplier> access_controller_processer;

    // STORAGE
    typedef storage::login login_storage;
    
};


int main() {

    supplier::access_controller_interactive l_access_controller_i;
    
    l_access_controller_i.start();

    if (l_access_controller_i.allow()) {
        std::cout << "YES, the login is " << l_access_controller_i.get_login();
    }
    else {
        std::cout << "Not logged";
    }
    std::cout << std::endl;
}


    
